﻿using System;
using System.Collections.Generic;
using Neturion.Dados;
using Neturion.IRepositorios;
using Neturion.Repositorios;

namespace Neturion.Negocios
{
    /// <summary>
    /// 
    /// </summary>
    public class NegocioBanco
    {
        private IRepositorioBanco _repositorioBanco;

        /// <summary>
        /// 
        /// </summary>
        public NegocioBanco()
        {
            _repositorioBanco = new RepositorioBanco();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="banco"></param>
        /// <returns></returns>
        public Banco Inserir(Banco banco)
        {
            return _repositorioBanco.Inserir(banco);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="banco"></param>
        /// <returns></returns>
        public Banco Atualizar(Banco banco)
        {
            return _repositorioBanco.Atualizar(banco);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="banco"></param>
        public void Excluir(Banco banco)
        {
            Banco bancoTmp = ObterPorId(banco.BancoId);
            _repositorioBanco.Excluir(bancoTmp);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public IList<Banco> ObterTodos()
        {
            return _repositorioBanco.ObterTodos();
        }

        public IList<Banco> ObterTodos(int inicio, int quantidade, int quantidadeMinima, Usuario usuarioPermissao, string codigoCompensacao, string descricao, DateTime? inicioDeVigenciaDe, DateTime? inicioDeVigenciaAte, DateTime? fimDeVigenciaDe, DateTime? fimDeVigenciaAte)
        {
            //Falta Implementar Regra de Negócio do Usuário, tratar posteriormente! 
            if (!inicioDeVigenciaAte.HasValue)
            {
                inicioDeVigenciaAte = inicioDeVigenciaDe;
            }

            if (!fimDeVigenciaAte.HasValue)
            {
                fimDeVigenciaAte = fimDeVigenciaDe;
            }

            return _repositorioBanco.ObterTodos(inicio, quantidade, quantidadeMinima, codigoCompensacao, descricao, inicioDeVigenciaDe, inicioDeVigenciaAte, fimDeVigenciaDe, fimDeVigenciaAte);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public Banco ObterPorId(int id)
        {
            return _repositorioBanco.ObterPorId(id);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="descricao"></param>
        /// <returns></returns>
        public IList<Banco> ObterPorDescricao(string descricao)
        {
            return _repositorioBanco.ObterPorDescricao(descricao);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="codigo"></param>
        /// <returns></returns>
        public IList<Banco> ObterPorCodigo(string codigo)
        {
            return _repositorioBanco.ObterPorCodigo(codigo);
        }
    }
}